<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css">
  <script src='../bbs.js'></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-120820034-1"></script>

  <link href="../bbs.css" type="text/css" rel="stylesheet">
  <link rel="shortcut icon" href="/favicon.ico">
  <title>正規表現(bregexp.dll ver1.02)の不具合 | サクラエディタ過去ログ</title>
</head>
<body>
<ul class="side">
        <a href="./" class="toindex">◀ANSI版開発トップへ</a>
        <li><div class="list-title">
    <span class="no">4874</span>
    <a class="thread-title" href="4874.html#4874">正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4876</span>
    <a class="thread-title" href="4874.html#4876">RE: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4877</span>
    <a class="thread-title" href="4874.html#4877">Re2: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4878</span>
    <a class="thread-title" href="4874.html#4878">Re3: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4887</span>
    <a class="thread-title" href="4874.html#4887">Re4: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4888</span>
    <a class="thread-title" href="4874.html#4888">Re5: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    </li><li><div class="list-title">
    <span class="no">4889</span>
    <a class="thread-title" href="4874.html#4889">Re5: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4893</span>
    <a class="thread-title" href="4874.html#4893">Re6: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4894</span>
    <a class="thread-title" href="4874.html#4894">Re7: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4908</span>
    <a class="thread-title" href="4874.html#4908">Re8: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    </li></ul></li><li><div class="list-title">
    <span class="no">4938</span>
    <a class="thread-title" href="4874.html#4938">Re7: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li><li><div class="list-title">
    <span class="no">4882</span>
    <a class="thread-title" href="4874.html#4882">RE2: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4886</span>
    <a class="thread-title" href="4874.html#4886">RE3: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4957</span>
    <a class="thread-title" href="4874.html#4957">Re4: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    <ul><li><div class="list-title">
    <span class="no">4958</span>
    <a class="thread-title" href="4874.html#4958">Re5: 正規表現(bregexp.dll ver1.02)の不具合</a></div>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li>
    </ul><ul class="main"><li><section><h1 id=4874>
    <span class="no">[4874]</span>
    <a class="thread-title" href="#4874">正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">ken2</span>
    <time datetime="2007-06-18T22:14:13">2007年06月18日 22:14</time></h1>
    <div class="body">はじめまして。いつも使わせていただいております。<br>さて、<br><br>・正規表現 "(a*)*b" (a, bは任意の文字)で文字列 "acab" (cは任意の文字)を<br>　マッチングするとウィンドウごと落ちます。<br>・"(a*)+b"でも落ちる。<br><br>・"cab", "ab", "b"をマッチングさせても問題ない。<br>・正規表現 "(a*)*", "b(a*)*", "(a+)+b", "(a+)*b"なら問題ない。<br><br>オリジナルの馬場氏のバージョンからの不具合のようです。<br>YukiWikiで使われていた正規表現から抽出したパターンなので、<br>それなりに使用されうるパターンだと考えます。<br>鬼車はこの不具合はないようです。<br><br># NFAのままで実装されているならカッコ内の*のイプシロン遷移が<br># 外の*で無限に繰り返されてスタックオーバーフローなのかなと<br># 思いますがperlのはDFAに変換していたような…よくわかりません。<br></div></section>
    <ul><li><section><h1 id=4876>
    <span class="no">[4876]</span>
    <a class="thread-title" href="#4876">RE: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">げんた</span>
    <time datetime="2007-06-19T00:13:40">2007年06月19日 00:13</time></h1>
    <div class="body">&gt;オリジナルの馬場氏のバージョンからの不具合のようです。<br>&gt;YukiWikiで使われていた正規表現から抽出したパターンなので、<br>&gt;それなりに使用されうるパターンだと考えます。<br>bregexpは再帰を使っているので，パターンによってはスタックオーバーフローになって落ちます．<br>これは現時点では制限事項としか言えません．<br></div></section>
    <ul><li><section><h1 id=4877>
    <span class="no">[4877]</span>
    <a class="thread-title" href="#4877">Re2: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">神楽</span>
    <time datetime="2007-06-19T01:02:57">2007年06月19日 01:02</time></h1>
    <div class="body">▼ げんたさん<br>&gt; &gt;オリジナルの馬場氏のバージョンからの不具合のようです。<br>&gt; &gt;YukiWikiで使われていた正規表現から抽出したパターンなので、<br>&gt; &gt;それなりに使用されうるパターンだと考えます。<br>&gt; bregexpは再帰を使っているので，パターンによってはスタックオーバーフローになって落ちます．<br>&gt; これは現時点では制限事項としか言えません．<br><br>bregonig.dllを正式採用（インストーラに含める）するか<br>サクラプロジェクトとして鬼車から正規表現DLLを作成するというのはいかがでしょうか？<br>過去にも正規表現エンジンをJRE32.DLLからBREGEXP.DLLに変更したことがあるそうですし。</div></section>
    <ul><li><section><h1 id=4878>
    <span class="no">[4878]</span>
    <a class="thread-title" href="#4878">Re3: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">げんた</span>
    <time datetime="2007-06-19T01:22:17">2007年06月19日 01:22</time></h1>
    <div class="body">&gt;bregonig.dllを正式採用（インストーラに含める）するか<br>その方が良いでしょうか．ただ正規表現に若干の差異があるみたいなので...<br>とりあえずファイル名の変更をしなくても鬼車版を認識するようには修正した方が親切かもしれません．<br></div></section>
    <ul><li><section><h1 id=4887>
    <span class="no">[4887]</span>
    <a class="thread-title" href="#4887">Re4: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">K.Takata</span>
    <time datetime="2007-06-24T14:56:03">2007年06月24日 14:56</time></h1>
    <div class="body">▼ げんたさん<br>&gt; ただ正規表現に若干の差異があるみたいなので...<br><br>非互換点は \w が２バイト文字も含む点ですね。<br>自分自身若干不便に感じていますが、これは鬼車の仕様ですし、<br>Perl 5.8 もそうなっていますから・・・。<br><br>それ以外は、基本的には機能追加と Perl の挙動に近づける<br>修正だと思っていただけばよいかと。<br><br><br># bregonig.dll の Unicode 対応版も試作してみました。</div></section>
    <ul><li><section><h1 id=4888>
    <span class="no">[4888]</span>
    <a class="thread-title" href="#4888">Re5: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">maru</span>
    <time datetime="2007-06-24T19:31:55">2007年06月24日 19:31</time></h1>
    <div class="body">&gt;&gt; ただ正規表現に若干の差異があるみたいなので... <br>&gt;非互換点は \w が２バイト文字も含む点ですね。<br>&gt;自分自身若干不便に感じていますが、これは鬼車の仕様ですし、<br>&gt;Perl 5.8 もそうなっていますから・・・。<br>&gt;# bregonig.dll の Unicode 対応版も試作してみました。<br><br>正規表現のパワフルな使い手さんたちにとってbregonig.dllってどうなのでしょう。<br>対応も早いし、素人目には悪くない感じですが。<br></div></section>
    </li><li><section><h1 id=4889>
    <span class="no">[4889]</span>
    <a class="thread-title" href="#4889">Re5: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">げんた</span>
    <time datetime="2007-06-25T02:26:49">2007年06月25日 02:26</time></h1>
    <div class="body">あ，作者ご本人様...<br><br>手始めに，bregonig.dllのファイル名を変更することなく認識させるパッチを作成しました．<br>Patches#1742481です．<br><br>実行ファイルはまとめバイナリとして置きました．<br>http://sakura.qp.land.to/?Junk%2Ftest-1.5.16.0<br><br>せっかくなのでついでに聞いてしまいます＞K.Takata様<br>1) bregonig.dllをパッケージ版(インストーラ)に含めて配布するのは問題ないでしょうか<br>2) その際パッケージにはバイナリのみ含めても問題ないでしょうか．<br>   ライセンスファイルなど併せてパッケージに含めるべきファイルはありますか．<br>bregonig.dllのライセンスについてはヘルプファイルに含めてもらおうかなとも思っています．<br></div></section>
    <ul><li><section><h1 id=4893>
    <span class="no">[4893]</span>
    <a class="thread-title" href="#4893">Re6: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">K.Takata</span>
    <time datetime="2007-06-26T20:06:30">2007年06月26日 20:06</time></h1>
    <div class="body">▼ げんたさん<br>&gt; せっかくなのでついでに聞いてしまいます＞K.Takata様<br>&gt; 1) bregonig.dllをパッケージ版(インストーラ)に含めて配布するのは問題ないでしょうか<br><br>問題ありません。<br><br>&gt; 2) その際パッケージにはバイナリのみ含めても問題ないでしょうか．<br><br>問題ありません。<br>オリジナル版の Bregexp.dll と同じように扱っていただければよいかと。<br><br>なお、bregonig.dll にバグが見つかったので、Ver.1.31 を公開しました。</div></section>
    <ul><li><section><h1 id=4894>
    <span class="no">[4894]</span>
    <a class="thread-title" href="#4894">Re7: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">K.Takata</span>
    <time datetime="2007-06-26T20:25:19">2007年06月26日 20:25</time></h1>
    <div class="body">ちなみに、オリジナル版の Bregexp.dll には、バグが少なくとも４つ、<br>Ver 1.02 には３つ残っています。オリジナル版に対するパッチを作ってみました。<br><br><a href=http://homepage3.nifty.com/k-takata/diary/bregexp-1.03.diff target=_top><nobr>http://<wbr>homepage<wbr>3.<wbr>nifty.<wbr>com/<wbr>k-<wbr>takata/<wbr>diary/<wbr>bregexp-<wbr>1.<wbr>03.<wbr>diff</nobr></a><br><a href=http://homepage3.nifty.com/k-takata/diary/2007-06.html#25b target=_top><nobr>http://<wbr>homepage<wbr>3.<wbr>nifty.<wbr>com/<wbr>k-<wbr>takata/<wbr>diary/<wbr>2007-<wbr>06.<wbr>html#<wbr>25b</nobr></a></div></section>
    <ul><li><section><h1 id=4908>
    <span class="no">[4908]</span>
    <a class="thread-title" href="#4908">Re8: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">K.Takata</span>
    <time datetime="2007-07-07T21:42:35">2007年07月07日 21:42</time></h1>
    <div class="body">&gt; ちなみに、オリジナル版の Bregexp.dll には、バグが少なくとも４つ、<br>&gt; Ver 1.02 には３つ残っています。オリジナル版に対するパッチを作ってみました。<br><br>もう１件あるのを忘れていました。パッチを更新しておきました。<br><br><a href=http://homepage3.nifty.com/k-takata/diary/bregexp-1.03.diff target=_top><nobr>http://<wbr>homepage<wbr>3.<wbr>nifty.<wbr>com/<wbr>k-<wbr>takata/<wbr>diary/<wbr>bregexp-<wbr>1.<wbr>03.<wbr>diff</nobr></a><br><a href=http://homepage3.nifty.com/k-takata/diary/2007-07.html#05b target=_top><nobr>http://<wbr>homepage<wbr>3.<wbr>nifty.<wbr>com/<wbr>k-<wbr>takata/<wbr>diary/<wbr>2007-<wbr>07.<wbr>html#<wbr>05b</nobr></a></div></section>
    </li></ul></li><li><section><h1 id=4938>
    <span class="no">[4938]</span>
    <a class="thread-title" href="#4938">Re7: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">じゅうじ</span>
    <time datetime="2007-07-22T23:27:27">2007年07月22日 23:27</time></h1>
    <div class="body">▼ K.Takataさん<br>&gt; ▼ げんたさん<br>&gt; &gt; せっかくなのでついでに聞いてしまいます＞K.Takata様<br>&gt; &gt; 1) bregonig.dllをパッケージ版(インストーラ)に含めて配布するのは問題ないでしょうか<br>&gt; <br>&gt; 問題ありません。<br>&gt; <br>&gt; &gt; 2) その際パッケージにはバイナリのみ含めても問題ないでしょうか．<br>&gt; <br>&gt; 問題ありません。<br>&gt; オリジナル版の Bregexp.dll と同じように扱っていただければよいかと。<br><br>VC6 でコンパイルし、<br>Yahoo/Junk/bregexp-1.03.zip に、diffとdllをアップしておきました。<br>プライベート ビルド情報 1.03 Wiki/Junk/33 未対応版です。</div></section>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li><li><section><h1 id=4882>
    <span class="no">[4882]</span>
    <a class="thread-title" href="#4882">RE2: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">すい</span>
    <time datetime="2007-06-21T23:44:55">2007年06月21日 23:44</time></h1>
    <div class="body">&gt;bregexpは再帰を使っているので，パターンによってはスタックオーバーフローになって落ちます．<br><br>この「落ちる」ってのだけでも、やめさせてもらえませんかね？<br>正規表現キーワードを使用している状態で長い行を表示させるとエディタごと落ちる、とか現状最悪ですし。<br><br>再帰なら、再帰の回数に制限かければ良いだけですよね。<br><br>・整数数値のグローバル変数を１個用意して、起動時に値を０クリアしておく。<br>・再帰を呼び出す直前で、そのグローバル変数を ++ する。<br>・再帰から帰って来た所で、そのグローバル変数を -- する。<br><br>だけで再帰の回数は分かりますよね。<br>で、そのグローバル変数の値が、ある規定値以上に達したら、処理を中断して<br>エラーダイアログを出すとか、エラーコードを返すなりすれば良いだけですよね。<br><br>問題はその規定値ですが、、、<br>デフォルト値は、どこの環境でも安心できる小さ目の値にしておいて、<br>意味を理解できるようなヘビーユーザーは自分で設定変更できるようにしておけば。<br>例えば bregexp.dll と同じディレクトリ内にある設定ファイルに<br>この再帰の上限値を書き込んでおくとか。<br></div></section>
    <ul><li><section><h1 id=4886>
    <span class="no">[4886]</span>
    <a class="thread-title" href="#4886">RE3: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">げんた</span>
    <time datetime="2007-06-23T02:19:49">2007年06月23日 02:19</time></h1>
    <div class="body">&gt;この「落ちる」ってのだけでも、やめさせてもらえませんかね？<br>Windowsの構造化例外を使って，スタックオーバーフローをキャッチすれば回避できるみたいです．<br>ただ，スタックオーバーフローを検知した場合にはその時点でマッチしないと判定するので，理論上マッチするはずのパターンを見逃しているように見えることがあります．<br><br>なんとかお試し版を作ってみました．<br><a href=http://sakura.qp.land.to/?Junk%2F33 target=_top><nobr>http://<wbr>sakura.<wbr>qp.<wbr>land.<wbr>to/?<wbr>Junk%<wbr>2F33</nobr></a><br><br>Wikiの方にも書きましたが，これはVC 2005でコンパイルしています．IsDebuggerPresent()を呼んでいるためにWindows 95では動作しません．VisualToolkit 2003を使ってコマンドラインでコンパイルすると例外をキャッチしてくれません．(だれか助けて)<br></div></section>
    <ul><li><section><h1 id=4957>
    <span class="no">[4957]</span>
    <a class="thread-title" href="#4957">Re4: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2007-08-08T21:49:09">2007年08月08日 21:49</time></h1>
    <div class="body">▼ げんたさん<br>&gt; Wikiの方にも書きましたが，これはVC 2005でコンパイルしています．IsDebuggerPresent()を呼んでいるためにWindows 95では動作しません．VisualToolkit 2003を使ってコマンドラインでコンパイルすると例外をキャッチしてくれません．(だれか助けて)<br>VS2003でも、bregexec_main()の中の最後のcatch(...)ブロックをコメントアウトするとbregexec()のほうの__exceptでキャッチできるようになるみたいです。<br>VS2005では、C++例外処理のcatch(...)は構造化例外をキャッチしないようになったということかな？<br><br>対策としては、そのままcatch(...)を除去してその他の例外を放置するか、_set_se_translator()を使って構造化例外も含むすべての例外をC++例外処理でキャッチするか、といったところでしょうか。</div></section>
    <ul><li><section><h1 id=4958>
    <span class="no">[4958]</span>
    <a class="thread-title" href="#4958">Re5: 正規表現(bregexp.dll ver1.02)の不具合</a>
    <span class="author">ryoji</span>
    <time datetime="2007-08-09T22:23:16">2007年08月09日 22:23</time></h1>
    <div class="body">&gt; 対策としては、そのままcatch(...)を除去してその他の例外を放置するか、_set_se_translator()を使って構造化例外も含むすべての例外をC++例外処理でキャッチするか、といったところでしょうか。<br>構造化例外とC++例外の場所を逆転するだけで大丈夫みたいですね。<br><br>げんたさんのパッチをもとに、お試し版を更新してみました。<br><a href=http://sakura.qp.land.to/?Junk%2F33 target=_top><nobr>http://<wbr>sakura.<wbr>qp.<wbr>land.<wbr>to/?<wbr>Junk%<wbr>2F33</nobr></a><br>VC2003, VC2005ともOKになってると思います。<br><br>構造化例外フィルタは、関数になっていたのを単純な式に置き換えています。スタックを修復する前に関数呼び出しするのは何か気持ち悪いかな、と思いまして。<br>＃現状の関数であればスタックアクセスは無さそうなので、例外処理中に別の例外（メモリ保護例外）が発生するということも無いとは思いますが。。。<br><br>VC6でもコンパイルは通るようにしましたが、VC6ではスタック修復のライブラリ関数が使えないので、VC6でコンパイルしたものだとスタックオーバーフローしたときは従来と同じように落ちます。<br>（VC6ではコンパイル時に、その旨のワーニングが出るようにしてあります）</div></section>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></body></html>